package dao;

import java.sql.SQLException;
import java.util.List;

import om.Bilder;
import om.Route;

import org.hibernate.HibernateException;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class BilderDao extends HibernateDaoSupport{
	
	/**
	 * Die Klasse Bilder. Alle Interaktionen mit der Datenbank
	 * in Bezug auf die Entity Bean Bilder sollten in dieser Klasse behandelt werden.
	 */
	
	public BilderDao(){}
	
	/**
	 <li>  Rueckgabewert ist ein Bild anhand seines Primaerschluessels
	 * @param id ist der Primaerschluessel {@link Bild}
	 * @return Ein Objekt vom Typ Bild
	 */
	public Bilder getBilderById(int id){
		HibernateTemplate template = getHibernateTemplate();
		return template.get(Bilder.class, id);
	}
	
	
	 /**
	 * @param routeid Es wird eine id uebergeben und die Datensaetze der Tabelle Bilder bestimmt
	 * @return Liste aller Bilder einer Route
	 */
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public List<Bilder> getBilderByRoute(final int routeid){
		HibernateTemplate template = getHibernateTemplate();
		return template.execute(new HibernateCallback() {
			
			@Override
			public Object doInHibernate(final org.hibernate.Session session) throws HibernateException, SQLException {
				
				final Route route = (Route) session.load(Route.class, routeid);
				List<Bilder> list = (List<Bilder>) session.createCriteria(Bilder.class)
						.add(Restrictions.eq("fs_routenid", route))
						.list();
				return list;
			}
		});
	}
	
	
	/**
	 <li> Rueckgabewert ist ein Objekt vom Typ Bilder 
	 <li>  Speichert ein {@link Bilder} Objekt
	 * @param bild Objekt vom Typ Bilder
	 * @param id {@link Route} Dazugehoerige Route zum Bild
	 * @return Ein Objekt vom Typ Bild
	 */
	public Bilder save(Bilder bild, Integer id){
		
		HibernateTemplate template = getHibernateTemplate();
		Route route = template.get(Route.class, id);

		bild.setFs_routenid(route);
		bild.setName(route.getName());
		template.saveOrUpdate(bild);
		return bild;
	}

	
	 /**
		 * Loescht ein bestimmtes {@link Bilder} Objekt aus der Datenbank
		 * @param route Die {@link Route} deren Bilder geloescht werden sollen
		 */
	public void delete(Route route) throws DaoException {
	   HibernateTemplate template = getHibernateTemplate();
	   List<Bilder> bilder= this.getBilderByRoute(route.getRouteid());
	   
	   for (Bilder bildchen : bilder) {
		   template.delete(bildchen);
	    }
	}
}
